home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1996 February / EnigmA AMIGA RUN 04 (1996)(G.R. Edizioni)(IT)[!][issue 1996-02][Skylink CD III].iso / earcd / comm2 / zpont311.lha / zpoint-3.11 / Rexx / WriteMessageRequester.cedzp < prev    next >
Text File  |  1995-03-09  |  18KB  |  739 lines

  1. /*
  2.    WriteMessageRequester.cedzp 1.2 (26.2.94) by Ueli Kaufmann
  3.    ARexx Skript für Zodiac's Point V37.121ß und apig.library
  4.  
  5. Nutzen:
  6. -------
  7. Man kann mit diesem Script direkt aus dem Cygnus-Ed eine Nachricht schreiben.
  8. Ich weiss, nicht weiter toll, aber als Beispiel vielleicht ganz brauchbar..
  9.  
  10.  
  11. Erwaehnenswertes:
  12. -----------------
  13. - WMR.ced bietet die Moeglichkeit, per GUI mehrere Empfaenger zu bestimmen.
  14.  
  15.  
  16.  
  17. Anforderungen:
  18. --------------
  19. apig.library v3.3 von fish_634
  20. Zodiacs-Point v37.112
  21. Cygnus-Editor v2.12
  22.  
  23.  
  24. Installation:
  25. -------------
  26.  Skript:
  27.    nach ZP:Rexx/ kopieren.
  28.  
  29.  ZP:
  30.    unveraendert.
  31.  
  32.  Cygnus-Ed:
  33.    Skript auf einer F-Taste installieren.
  34.  
  35.  apig.library:
  36.    ins LIBS: kopieren.
  37.  
  38.  
  39. Bedienung:
  40. ----------
  41.    Im CEd mittels F-Taste Skript starten.
  42.    Subject und Empfänger muessen angegeben werden.
  43.    Cookie und Quittung sind optional.
  44.     Text betaetigen: zum Schreiben einer Nachricht.
  45.    Binär betaetigen: zum Senden eines files.
  46.  
  47.  
  48. Neuerungen:
  49. -----------
  50. v1.1:
  51. -----
  52. - laeuft jetzt auf dem ZP-Publicscreen
  53.  
  54. V1.0:
  55. -----
  56. - initial release }:->
  57.  
  58.  
  59. Limitierungen:
  60. --------------
  61.  - Die GUI ist NICHT font-sensitiv! Sie funktioniert nur mit 8x8 Fonts!
  62.  
  63.  - Das Skript kann nicht verwendet werden, wenn mittels ZPoint eine
  64.     Nachricht gelesen wird. Scheinbar 'vergisst' ZPoint alle bereits
  65.     eingetroffenen Nachrichten, wenn der Reader verlassen wird.. :-(
  66.  
  67.  - Die Adressen-Liste ist noch nicht brauchbar. Es fehlt noch ein
  68.    entsprechendes ARexx-Kommando, um legal an die Adressen zu kommen.
  69.  
  70.  - die Befehlsfolge zum Wechseln ins Privat-Brett
  71.      UP 'ffff ffff'x
  72.      JUMPTOBOARD 3
  73.    in der Funktion send_mail ist IMHO etwas murksig.
  74.    der Arexx-Befehl "PM" waere besser..  Ralph?
  75.  
  76.  - Die Nachricht kann 'nur' versendet werden, nicht gespeichert..  Ralph?
  77.  
  78. */
  79.  
  80.  
  81. parse arg zpPort        /* ZP-Port Name als Argument erhalten. */
  82. if zpPort == "" then    /* Wirklich? */
  83.    zpPort = "ZPoint"    /* Ätschi-Bätschi */
  84.  
  85.  
  86. /* benoetigte Libraries laden */
  87. if(~show('l',"rexxsupport.library")) then
  88.    x = addlib("rexxsupport.library",0,-30,0)
  89.  
  90. if(~show('l',"apig.library")) then
  91.    x = addlib("apig.library",0,-30,0)
  92.  
  93.  
  94.  /* apig vorbereiten */
  95. call Set_APIG_Globals()
  96.  
  97. idNME = 1      /* Gadget-ID fuers Namen-Gadget */
  98. idEMP = 2      /* Gadget-ID fuers Empfaenger-Gadget */
  99. idADR = 3      /* Gadget-ID fuers Adressen-Gadget */
  100. idNEW = 4      /* Gadget-ID fuers Neu-Gadget */
  101. idDEL = 5      /* Gadget-ID fuers Löschen-Gadget */
  102. idDIS = 6      /* Gadget-ID fuers "Diskussion-In"-Gadget */
  103. idBET = 7      /* Gadget-ID fuers Betreff-Gadget */
  104. idTXT = 8      /* Gadget-ID fuers Text-Gadget */
  105. idBIN = 9      /* Gadget-ID fuers Binär-Gadget */
  106. idCKI = 10     /* Gadget-ID fuers Cookie-Gadget */
  107. idCNF = 11     /* Gadget-ID fuers Quittung-Gadget */
  108.  
  109.  
  110. screen       = LockPubScreen(zpPort)        /* gonna put our window  */
  111.                                             /* upon ZPoint screen    */
  112.  
  113. if screen = null() then
  114. do
  115.     ADDRESS "rexx_ced"
  116.    OKAY1 "ZPoint ist noch nicht gestartet.."
  117.    exit 10
  118. end
  119.  
  120.  
  121. scrvinfo    = GetVisualInfo(screen)        /* NewGadgets need this  */
  122.  
  123. scrfont     = GETVALUE(screen,40,4,'p')    /* NewGadgets need this  */
  124.                                            /* points to TextAttr    */
  125.  
  126. glist       = AllocVec(4,MEMF_CLEAR)       /* a pointer for context */
  127.  
  128. conxgad     = CreateContext(glist)
  129. prevGadget  = conxgad
  130.  
  131. /* Namen String-Gadget */
  132.  
  133. newgadx = MakeNewGadget(scrvinfo,scrfont,16,207,185,14,null(),
  134.                        ,null(),idNME,null())
  135.  
  136. prevGadget = CreateGadget(STRING_KIND,prevGadget,newgadx,
  137.                          ,GTST_MaxChars, 40,
  138.                          ,TAG_DONE,0)
  139. nameGadget = prevGadget
  140.  
  141.  
  142. /* Diskussion-In String-Gadget */
  143.  
  144. SetNewGadget(newgadx,scrvinfo,scrfont,155,147,240,14,"Diskussion-In:",
  145.             ,PLACETEXT_LEFT,idDIS,null())
  146.  
  147. prevGadget = CreateGadget(STRING_KIND,prevGadget,newgadx,
  148.                          ,GTST_MaxChars, 40,
  149.                          ,TAG_DONE,0)
  150.  
  151.  
  152. /* Betreff String-Gadget */
  153.  
  154. SetNewGadget(newgadx,scrvinfo,scrfont,155,164,240,14,"Betreff:",
  155.             ,PLACETEXT_LEFT,idBET,null())
  156.  
  157. prevGadget = CreateGadget(STRING_KIND,prevGadget,newgadx,
  158.                          ,GTST_MaxChars,40,
  159.                          ,TAG_DONE,0)
  160.  
  161.  
  162. /* Empfänger Listview-Gadget */
  163.  
  164. SetNewGadget(newgadx,scrvinfo,scrfont,16,26,185,95,"Empfänger:",
  165.             ,PLACETEXT_ABOVE,idEMP,null())
  166.  
  167. empList = build_EMP_list()
  168.  
  169. prevGadget = CreateGadget(LISTVIEW_KIND,prevGadget,newgadx,
  170.                          ,GTLV_Labels, empList,
  171.                          ,GTLV_ShowSelected, nameGadget,
  172.                          ,TAG_DONE,0)
  173. empGadget = prevGadget
  174.  
  175.  
  176. /* Adressen Listview-Gadget */
  177.  
  178. SetNewGadget(newgadx,scrvinfo,scrfont,210,26,185,120,"Adressen:",
  179.             ,PLACETEXT_ABOVE,idADR,null())
  180.  
  181. adrList = build_ADR_list()
  182.  
  183. prevGadget = CreateGadget(LISTVIEW_KIND,prevGadget,newgadx,
  184.                          ,GTLV_Labels, adrList,
  185.                          ,TAG_DONE,0)
  186. adrGadget = prevGadget
  187.  
  188.  
  189. /* Neu Button-Gadget */
  190.  
  191. SetNewGadget(newgadx,scrvinfo,scrfont,16,130,80,12,"Neu",
  192.             ,PLACETEXT_IN,idNEW,null())
  193.  
  194. prevGadget = CreateGadget(BUTTON_KIND,prevGadget,newgadx,
  195.                          ,TAG_DONE,0)
  196.  
  197.  
  198. /* Löschen Button-Gadget */
  199.  
  200. SetNewGadget(newgadx,scrvinfo,scrfont,121,130,80,12,"Löschen",
  201.             ,PLACETEXT_IN,idDEL,null())
  202.  
  203. prevGadget = CreateGadget(BUTTON_KIND,prevGadget,newgadx,
  204.                          ,TAG_DONE,0)
  205.  
  206.  
  207. /* Text Button-Gadget */
  208.  
  209. SetNewGadget(newgadx,scrvinfo,scrfont,16,182,80,12,"Text",
  210.             ,PLACETEXT_IN,idTXT,null())
  211.  
  212. prevGadget = CreateGadget(BUTTON_KIND,prevGadget,newgadx,
  213.                          ,TAG_DONE,0)
  214.  
  215.  
  216. /* Binär Button-Gadget */
  217.  
  218. SetNewGadget(newgadx,scrvinfo,scrfont,315,182,80,12,"Binär",
  219.             ,PLACETEXT_IN,idBIN,null())
  220.  
  221. prevGadget = CreateGadget(BUTTON_KIND,prevGadget,newgadx,
  222.                          ,TAG_DONE,0)
  223.  
  224.  
  225.  
  226. /* Cookie Checkbox-Gadget */
  227.  
  228. appendCookie = ''    /* per default kein cookie anhängen */
  229.  
  230. SetNewGadget(newgadx,scrvinfo,scrfont,110,182,12,12,"Cookie",
  231.             ,PLACETEXT_RIGHT,idCKI,null())
  232.  
  233. prevGadget = CreateGadget(CHECKBOX_KIND,prevGadget,newgadx,
  234.                          ,TAG_DONE,0)
  235.  
  236.  
  237. /* Quittung Checkbox-Gadget */
  238.  
  239. forceConfirm = ''      /* per default keine Quittung verlangen */
  240.  
  241. SetNewGadget(newgadx,scrvinfo,scrfont,202,182,12,12,"Quittung",
  242.             ,PLACETEXT_RIGHT,idCNF,null())
  243.  
  244. prevGadget = CreateGadget(CHECKBOX_KIND,prevGadget,newgadx,
  245.                          ,TAG_DONE,0)
  246.  
  247. call FreeThis(newgadx)        /* NewGadget-Struktur Speicher freigeben */
  248.  
  249.  
  250. window = open_window()
  251. if window = null() then
  252. do
  253.    address value zpPort
  254.    REQUESTNOTIFY "Requester konnte nicht geöffnet werden.."
  255.    exit(10)
  256. end
  257.  
  258. OPTIONS FAILAT 6     /* ignore warnings */
  259.  
  260. SIGNAL ON SYNTAX     /* ensure clean exit */
  261.  
  262. /**********************************/
  263.  
  264. actualNodePtr = 0
  265. actualNodeNum = 0
  266.  
  267. binMode = 0
  268.  
  269. exitme = 0
  270. do while exitme = 0
  271.  
  272.    x = waitpkt(portname)
  273.    do forever 
  274.       msg = getpkt(portname)
  275.       if msg = '0000 0000'x
  276.          then leave
  277.  
  278.       msgclass    = getarg(msg,0)
  279.       msgcode  = getarg(msg,1)
  280.       msggadadr= getarg(msg,8)
  281.       msggadid    = getarg(msg,9)
  282.       x = reply(msg,0)  
  283.  
  284.       select
  285.          when msgclass = CLOSEWINDOW then    /* Close-Gadget */
  286.             exitme = 1
  287.  
  288.          when msgclass = GADGETUP then       /* Gadget-UP */
  289.          do
  290.                 select
  291.                when msggadid = idEMP then        /* aktueller Node bestimmen */
  292.                do
  293.                   actualNodeNum = msgcode + 1
  294.                   actualNodePtr = empList
  295.                   do x = 1 to actualNodeNum
  296.                       actualNodePtr = next(actualNodePtr)
  297.                   end
  298.                end
  299.  
  300.  
  301.                when msggadid = idADR then    /* Adresse als Empfänger eintragen */
  302.                do
  303.                   dummy = msgcode + 1
  304.                   fnode = adrList
  305.                   do x = 1 to dummy
  306.                       fnode = next(fnode)
  307.                   end
  308.  
  309.                   call GT_SetGadgetAttrs(empGadget,window,null(),
  310.                                         ,GTLV_Labels,'ffffffff'x,
  311.                                         ,TAG_DONE,0)
  312.  
  313.                   newName = GETVALUE(fnode,10,4,'s')
  314.                   dummy = ADD_LIST_NODE(empList, newName)
  315.  
  316.                   call GT_SetGadgetAttrs(empGadget,window,null(),
  317.                                         ,GTLV_Labels, empList,
  318.                                         ,TAG_DONE,0)
  319.                end
  320.  
  321.  
  322.                when msggadid = idNME then        /* Empfänger-Name abändern */
  323.                do
  324.                   if actualNodePtr ~= '0000 0000'x then
  325.                   do
  326.                      newName = GETSTRGAD(window,idNME,null())
  327.  
  328.                      call GT_SetGadgetAttrs(empGadget,window,null(),
  329.                                            ,GTLV_Labels,'ffffffff'x,
  330.                                            ,TAG_DONE,0)
  331.  
  332.                      call REMOVE(actualNodePtr)
  333.                      call FREE_EXEC_NODE(actualNodePtr)
  334.  
  335.                      actualNodePtr = ADD_LIST_NODE(empList, newName, actualNodeNum)
  336.  
  337.                      call GT_SetGadgetAttrs(empGadget,window,null(),
  338.                                            ,GTLV_Labels, empList,
  339.                                            ,TAG_DONE,0)
  340.                   end
  341.                end
  342.  
  343.  
  344.                when msggadid = idNEW then        /* neuer Node als Empfänger */
  345.                do
  346.                   call GT_SetGadgetAttrs(empGadget,window,null(),
  347.                                         ,GTLV_Labels,'ffffffff'x,
  348.                                         ,TAG_DONE,0)
  349.  
  350.                   dummy = ADD_LIST_NODE(empList, "> Neuer Eintrag <")
  351.  
  352.                   call GT_SetGadgetAttrs(empGadget,window,null(),
  353.                                         ,GTLV_Labels, empList,
  354.                                         ,TAG_DONE,0)
  355.                end
  356.  
  357.  
  358.                when msggadid = idDEL then        /* aktueller Node löschen */
  359.                do
  360.                   if actualNodePtr ~= '0000 0000'x then
  361.                   do
  362.                      call GT_SetGadgetAttrs(empGadget,window,null(),
  363.                                            ,GTLV_Labels,'ffffffff'x,
  364.                                            ,TAG_DONE,0)
  365.  
  366.                      call REMOVE(actualNodePtr)
  367.                      call FREE_EXEC_NODE(actualNodePtr)
  368.  
  369.                      call GT_SetGadgetAttrs(empGadget,window,null(),
  370.                                            ,GTLV_Labels, empList,
  371.                                            ,TAG_DONE,0)
  372.  
  373.                      actualNodePtr = '0000 0000'x
  374.                      actualNodeNum = 0
  375.                   end
  376.                end
  377.  
  378.  
  379.                when msggadid = idTXT then
  380.                do
  381.                   binMode = 0
  382.  
  383.                   if check_subject() ~= 0 then
  384.                   do
  385.                      wto = build_EMP_string()
  386.                      if wto ~= "" then
  387.                      do
  388.                          txtFile = 'T:will_be_deleted'
  389.  
  390.                          ADDRESS Command "c:ed" txtFile " -sticky"
  391.  
  392.                         wsubj = build_BET_string()
  393.  
  394.                         wopts = build_OPT_string()
  395.  
  396.                         send_mail()
  397.                      end
  398.                   end
  399.                end
  400.  
  401.  
  402.                when msggadid = idBIN then
  403.                do
  404.                   binMode = 1
  405.  
  406.                   if check_subject() ~= 0 then
  407.                   do
  408.                      wto = build_EMP_string()
  409.                      if wto ~= "" then
  410.                      do
  411.                          freq = ALLOCFILEREQUEST()
  412.  
  413.                          binFile = REQUESTFILE(freq,0,0,"","RAM:")
  414.                          if binFile ~= "" then
  415.                         do
  416.                            wsubj = build_BET_string()
  417.  
  418.                            wopts = build_OPT_string()
  419.  
  420.                            send_mail()
  421.                         end
  422.  
  423.                          call FREEFILEREQUEST(freq)
  424.                      end
  425.                   end
  426.                end
  427.  
  428.  
  429.                when msggadid = idCKI then
  430.                do
  431.                   if GADSELECTED(msggadadr) then
  432.                      appendCookie = 'COOKIE'
  433.                   else
  434.                      appendCookie = ''
  435.                end
  436.  
  437.  
  438.                when msggadid = idCNF then
  439.                do
  440.                   if GADSELECTED(msggadadr) then
  441.                      forceConfirm = 'CONFIRM'
  442.                   else
  443.                      forceConfirm = ''
  444.                end
  445.  
  446.                otherwise
  447.                   nop
  448.             end
  449.          end
  450.  
  451.          otherwise
  452.            nop
  453.       end
  454.    end
  455. end
  456.  
  457.  
  458. /**********************************/
  459.  
  460. SYNTAX:
  461.  
  462. close_window()
  463.  
  464. call FreeVisualInfo(scrvinfo)
  465.  
  466. call FREE_EXEC_LIST(empList)
  467. call FREE_EXEC_LIST(adrList)
  468.  
  469. exit
  470.  
  471.  
  472.  
  473.  
  474.  
  475. build_EMP_list:
  476. mylist = AllocMem(14,MEMF_CLEAR)  /* our list structure  */
  477.                                   /* always use ALLOCMEM */
  478.                                   /* so it can be freed  */
  479.                                   /* properly.           */
  480.  
  481. call NewList(mylist)
  482. return mylist
  483.  
  484.  
  485. build_ADR_list:
  486. mylist = AllocMem(14,MEMF_CLEAR)  /* our list structure  */
  487.                                   /* always use ALLOCMEM */
  488.                                   /* so it can be freed  */
  489.                                   /* properly.           */
  490.  
  491. call NewList(mylist)
  492.  
  493. do xm = 1 to 3
  494.    txt = "Adresse_" || xm
  495.    dummy = ADD_LIST_NODE(mylist,txt)
  496. end
  497. return mylist
  498.  
  499.  
  500.  
  501. build_EMP_string:
  502.    wto   = "RECEIVER "
  503.    fnode = next(empList)
  504.    success = 0
  505.  
  506.    if fnode ~= '0000 0000'x then
  507.    do
  508.       do forever
  509.          if next(fnode) ~= '0000 0000'x then
  510.          do
  511.             success = 1
  512.             newName = GETVALUE(fnode,10,4,'s')
  513.              wto     = wto || newName
  514.  
  515.           fnode   = next(fnode)
  516.  
  517.          if next(fnode) ~= '0000 0000'x then
  518.                wto = wto || ","
  519.             else
  520.                break
  521.           end
  522.           else
  523.              break
  524.       end
  525.    end
  526.  
  527.    if success ~= 0 then
  528.       return wto
  529.  
  530.    address value zpPort
  531.    REQUESTNOTIFY "Es wurde kein Empfänger angegeben!"
  532.    address
  533.  
  534. return ""
  535.  
  536.  
  537.  
  538. build_BET_string:
  539.    wsubj = GETSTRGAD(window,idBET,null())
  540.    wsubj = 'SUBJECT "' || wsubj'"'
  541. return wsubj
  542.  
  543.  
  544.  
  545. build_OPT_string:
  546.    wopts = ""
  547.    addSpace = 0
  548.  
  549.    if binMode = 0 then
  550.    do
  551.       if appendCookie ~= '' then
  552.       do
  553.          wopts = wopts || appendCookie
  554.          addSpace = 1
  555.       end
  556.    end
  557.    else
  558.    do
  559.       wopts = wopts || "binMode"
  560.       addSpace = 1
  561.    end
  562.  
  563.    if forceConfirm ~= '' then
  564.    do
  565.       if addSpace ~= 0 then
  566.          wopts = wopts || " "
  567.  
  568.       wopts = wopts || forceConfirm
  569.       addSpace = 1
  570.    end
  571.  
  572.    wdisk = GETSTRGAD(window,idDIS,null())
  573.    if wdisk ~= "" then
  574.    do
  575.       wdisk = "FOLLOWUP " || wdisk
  576.  
  577.       if addSpace ~= 0 then
  578.          wopts = wopts || " "
  579.  
  580.       wopts = wopts || wdisk
  581.    end
  582. return wopts
  583.  
  584.  
  585.  
  586. check_subject:
  587.    if GETSTRGAD(window,idBET,null()) = "" then
  588.    do
  589.       address value zpPort
  590.       REQUESTNOTIFY "Es wurde kein Betreff angegeben!"
  591.       address
  592.       return 0
  593.    end
  594. return 1
  595.  
  596.  
  597.  
  598. send_mail:
  599.    reqtitle = "Nachricht okay?"
  600.  
  601.    reqtext =            "Empfänger:" wto '0a'x
  602.    reqtext = reqtext || "  Betreff:" wsubj '0a'x
  603.    reqtext = reqtext || " Optionen:" wopts
  604.  
  605.     reqgads  = "Senden | Abbrechen"
  606.  
  607.     reqx = EASYREQUEST(window,reqtitle,reqtext,reqgads,null(),null(),0)
  608.  
  609.    if reqx = 1 then
  610.    do
  611.       address value zpPort
  612.       options results
  613.  
  614.       level = WHICHLEVEL
  615.       if level ~= "BOARDMENU" then
  616.       do
  617.          BOARDMENU      /* ins Brettmenu steppen */
  618.  
  619.          if level = "BOARD" then
  620.             UP 'fffff ffff'x
  621.  
  622.          JUMPTOBOARD 3  /* Balken auf Privat-Verzeichnis stellen */
  623.          ENTERBOARD     /* und eintauchen */
  624.       end
  625.  
  626.       if binMode ~= 0 then
  627.          WRITEMESSAGE binFile wto wsubj wopts
  628.       else
  629.          WRITEMESSAGE txtFile wto wsubj wopts
  630.  
  631.       if rc = 0 then
  632.          SAY("Nachricht konnte nicht verschickt werden..")
  633.        else
  634.           SAY("Nachricht wurde verschickt")
  635.     end
  636. return 0
  637.  
  638.  
  639. /*****************************************************************/
  640.  
  641. open_window:
  642. wintitle = "ZPoint Rexx Schreiben-Requester"
  643. winidcmp = CLOSEWINDOW+GADGETUP
  644. winflags = WINDOWCLOSE+WINDOWDRAG+WINDOWDEPTH+ACTIVATE
  645.  
  646. portname = "ZPOINT_WRITEREQUESTER"
  647.  
  648. p = openport(portname)
  649.  
  650. myTitle  = 0
  651. tagList  = 0
  652. window   = 0
  653.  
  654. myTitle = AllocVec(length(wintitle)+1,MEMF_CLEAR)
  655. if myTitle ~= null() then
  656. do
  657.    call export(myTitle,wintitle)
  658.  
  659.    tagList = AllocateTagItems(12)
  660.    if tagList ~= null() then
  661.    do
  662.       call SetTagSlot(tagList,0,WA_LEFT,'n',0)
  663.  
  664.       call SetTagSlot(tagList,1,WA_TOP,'n',0)
  665.  
  666.       call SetTagSlot(tagList,2,WA_WIDTH,'n',411)
  667.  
  668.       call SetTagSlot(tagList,3,WA_HEIGHT,'n',198)
  669.  
  670.       call SetTagSlot(tagList,4,WA_DRAGBAR,'n',1) 
  671.  
  672.       call SetTagSlot(tagList,5,WA_CLOSEGADGET,'n',1) 
  673.  
  674.       call SetTagSlot(tagList,6,WA_ACTIVATE,'n',1) 
  675.  
  676.       call SetTagSlot(tagList,7,WA_TITLE,'p',myTitle)
  677.  
  678.       call SetTagSlot(tagList,8,WA_FLAGS,'n',winflags)
  679.  
  680.       call SetTagSlot(tagList,9,WA_IDCMP,'n',winidcmp)
  681.  
  682.       call SetTagSlot(tagList,10,WA_CUSTOMSCREEN,'p',screen)
  683.  
  684.       call SetTagSlot(tagList,11,TAG_DONE,'n',0)
  685.  
  686.       window = OpenWindowTagList(portname,null(),tagList)
  687.       if window ~= null() then
  688.       do
  689.           call AddGList(window, conxgad, -1, -1, null());
  690.           call RefreshGList(conxgad, window, null(), -1);
  691.          call GT_RefreshWindow(window)
  692.       end
  693.    end
  694. end
  695.  
  696. call UnlockPubScreen(null(),screen)
  697.  
  698. return(window)
  699.  
  700.  
  701.  
  702. close_window:
  703. if conxgad ~= null() then
  704. do
  705.    if window ~= null() then
  706.       call RemoveGList(window, conxgad, -1)
  707.  
  708.    call FreeGadgets(conxgad)
  709.    drop conxgad
  710. end
  711.  
  712. if glist ~= null() then
  713. do
  714.    call FreeVec(glist)
  715.    drop glist
  716. end
  717.  
  718. if window ~= null() then
  719. do
  720.    call CloseWindow(window)
  721.    drop window
  722. end
  723.  
  724. if tagList ~= null() then
  725. do
  726.    call FreeTagItems(tagList)
  727.    drop tagList
  728. end
  729.  
  730. if myTitle ~= null() then
  731. do
  732.    call FreeVec(myTitle)
  733.    drop myTitle
  734. end
  735.  
  736. return(0)
  737.  
  738. /*****************************************************************/
  739.